FSM API
API Specification FR
L'API FSM prend en charge les endpoints suivants :
- POST /rest/v2/tickets
- PATCH /rest/v2/tickets/{ticketId}
- PATCH /rest/v2/tickets/
- GET /rest/v2/tickets/{ticketId}
- GET /rest/v2/tickets/
- POST /rest/v1/attachments
- POST /rest/v1/location-nodes
- GET /rest/v1/site-locations
- GESTION DES ERREURS
POST /rest/v2/tickets
Ce endpoint nécessite l'en-tête HTTP ci-dessous
Content-type: application/json
X-Conversation-Id: {Paramètre d'en-tête facultatif fourni par le client}
client_id: {paramètre d'en-tête obligatoire fourni par la plate-forme Dali}
client_secret: {paramètre d'en-tête obligatoire fourni par la plate-forme Dali}Envoyer une demande d'intervention à l'application LOOMA
Le body à mettre dans l'opération POST a le format suivant ::
{
"ticketExternalId": "nom du ticket dans le système partenaire",
"ticketBusinessStatus": "Statut LOOMA du ticket",
"ticketPriority": "priorité du ticket",
"ticketType": "type business du ticket (exemple : maintenance corrective)",
"problemTypeCode": "domaine contractuel fixe de VFF",
"ticketOriginCode": "Code origine du ticket",
"ticketClient": "nom du client lié au ticket",
"companyName": "nom de l'environnement LOOMA",
"ticketSubject": "sujet du ticket",
"ticketRemarks": "remarque du ticket",
"lastActivityRemark": "note du technicien lors de sa dernière intervention",
"dutyFlag": boolean,
"outsideBundleFlag": boolean,
"clientPresenceFlag": boolean,
"doNotStartBeforeDate": "yyyy-mm-ddThh:mm:ssZ",
"ticketClientValidator": "email du validateur",
"workImpactUrgency": "priorité dans mon travail",
"workEnvironmentImpactUrgency": "priorité dans mon environnement",
"siteArrivalContractualDate": "yyyy-mm-ddThh:mm:ssZ",
"siteId": "site d'intervention",
"contactExternalId": "identifiant du contact",
"contactEmailAddress": "email du contact",
"contactFirstName": "prénom du contact",
"contactLastName": "nom du contact",
"contactMobilePhone": "numéro de portable du contact",
"additionalContact": "contact additionnel",
"ticketEquipmentId": "Id de l'équipement du ticket",
"serviceLevel1": "catalogue de service categorie 1",
"serviceLevel2": "catalogue de service categorie 2",
}PATCH /rest/v2/tickets/{ticketId}
Modifier une demande d'intervention par son identifiant
Le body à mettre dans l'opération PATCH a le format suivant :
{
"ticketExternalId": "nom du ticket dans le système partenaire",
"ticketBusinessStatus": "Statut LOOMA du ticket",
"ticketPriority": "priorité du ticket",
"ticketType": "type business du ticket (exemple : maintenance corrective)",
"problemTypeCode": "domaine contractuel fixe de VFF",
"ticketOriginCode": "Code origine du ticket",
"ticketClient": "nom du client lié au ticket",
"companyName": "nom de l'environnement LOOMA",
"ticketSubject": "sujet du ticket",
"ticketRemarks": "remarque du ticket",
"lastActivityRemark": "note du technicien lors de sa dernière intervention",
"dutyFlag": boolean,
"outsideBundleFlag": boolean,
"clientPresenceFlag": boolean,
"doNotStartBeforeDate": "yyyy-mm-ddThh:mm:ssZ",
"ticketClientValidator": "email du validateur",
"workImpactUrgency": "priorité dans mon travail",
"workEnvironmentImpactUrgency": "priorité dans mon environnement",
"siteArrivalContractualDate": "yyyy-mm-ddThh:mm:ssZ",
"siteId": "site d'intervention",
"contactExternalId": "identifiant du contact",
"contactEmailAddress": "email du contact",
"contactFirstName": "prénom du contact",
"contactLastName": "nom du contact",
"contactMobilePhone": "numéro de portable du contact",
"additionalContact": "contact additionnel",
"ticketEquipmentId": "Id de l'équipement du ticket",
"serviceLevel1": "catalogue de service categorie 1",
"serviceLevel2": "catalogue de service categorie 2",
}PATCH /rest/v2/tickets
Modifier une demande d'intervention par son code interne/ son identifiant externe
Ce endpoint prend en charge les paramètres de requête suivants et leurs combinaisons:
- ticketCode={ticketCode}: paramètre de requête permettant de faire PATCH sur une requête d'intervention par son code
- ticketExternalId={ticketExternalId}: paramètre de requête permettant de faire PATCH sur une requête d'intervention par son identifiant externe
Le body à mettre dans l'opération PATCH a le format suivant :
{
"ticketExternalId": "nom du ticket dans le système partenaire",
"ticketBusinessStatus": "Statut LOOMA du ticket",
"ticketPriority": "priorité du ticket",
"ticketType": "type business du ticket (exemple : maintenance corrective)",
"problemTypeCode": "domaine contractuel fixe de VFF",
"ticketOriginCode": "Code origine du ticket",
"ticketClient": "nom du client lié au ticket",
"companyName": "nom de l'environnement LOOMA",
"ticketSubject": "sujet du ticket",
"ticketRemarks": "remarque du ticket",
"lastActivityRemark": "note du technicien lors de sa dernière intervention",
"dutyFlag": boolean,
"outsideBundleFlag": boolean,
"clientPresenceFlag": boolean,
"doNotStartBeforeDate": "yyyy-mm-ddThh:mm:ssZ",
"ticketClientValidator": "email du validateur",
"workImpactUrgency": "priorité dans mon travail",
"workEnvironmentImpactUrgency": "priorité dans mon environnement",
"siteArrivalContractualDate": "yyyy-mm-ddThh:mm:ssZ",
"siteId": "site d'intervention",
"contactExternalId": "identifiant du contact",
"contactEmailAddress": "email du contact",
"contactFirstName": "prénom du contact",
"contactLastName": "nom du contact",
"contactMobilePhone": "numéro de portable du contact",
"additionalContact": "contact additionnel",
"ticketEquipmentId": "Id de l'équipement du ticket",
"serviceLevel1": "catalogue de service categorie 1",
"serviceLevel2": "catalogue de service categorie 2",
}GET /rest/v2/tickets/{ticketId}
Recupérer une demande d'intervention par son ID
Ce endpoint nécessite l'en-tête HTTP ci-dessous
Content-type: application/json
X-Conversation-Id: {Paramètre d'en-tête facultatif fourni par le client}
client_id: {paramètre d'en-tête obligatoire fourni par la plate-forme Dali}
client_secret: {paramètre d'en-tête obligatoire fourni par la plate-forme Dali}
companyName : {paramètre d'en-tête obligatoire fourni par Vinci Facilities}Le payload renvoyé par l'opération GET a le format suivant :
{
"header": {
"apiname" : "{nom de l'API}",
"apiversion": "{version du schéma suivant le format à un chiffre X}",
"correlationId": "{correlationId transmis tout au long de la transaction}"
},
"data": [
{
"ticketExternalId": "nom du ticket dans le système partenaire",
"ticketId": "Id interne du ticket LOOMA",
"ticketCode": "code interne du ticket LOOMA",
"ticketBusinessStatus": "Statut LOOMA du ticket",
"ticketPriority": "priorité du ticket",
"ticketType": "type business du ticket (exemple : maintenance corrective)",
"problemTypeCode": "domaine contractuel fixe de VFF",
"ticketOriginCode": "Code origine du ticket",
"ticketClient": "nom du client lié au ticket",
"companyName": "nom de l'environnement LOOMA",
"ticketSubject": "sujet du ticket",
"ticketRemarks": "remarque du ticket",
"lastActivityRemark": "note du technicien lors de sa dernière intervention",
"dutyFlag": boolean,
"outsideBundleFlag": boolean,
"clientPresenceFlag": boolean,
"doNotStartBeforeDate": "yyyy-mm-ddThh:mm:ssZ",
"ticketClientValidator": "email du validateur",
"workImpactUrgency": "priorité dans mon travail",
"workEnvironmentImpactUrgency": "priorité dans mon environnement",
"siteArrivalContractualDate": "yyyy-mm-ddThh:mm:ssZ",
"siteId": "site d'intervention",
"contactExternalId": "identifiant du contact",
"contactEmailAddress": "email du contact",
"contactFirstName": "prénom du contact",
"contactLastName": "nom du contact",
"contactMobilePhone": "numéro de portable du contact",
"additionalContact": "contact additionnel",
"ticketEquipmentId": "Id de l'équipement du ticket",
"serviceLevel1": "catalogue de service categorie 1",
"serviceLevel2": "catalogue de service categorie 2",
}
]GET /rest/v2/tickets/
Récupérer une demande d'intervention par son code interne/ par son identifiant externe
Ce endpoint nécessite l'en-tête HTTP ci-dessous
Content-type: application/json
X-Conversation-Id: {Paramètre d'en-tête facultatif fourni par le client}
client_id: {paramètre d'en-tête obligatoire fourni par la plate-forme Dali}
client_secret: {paramètre d'en-tête obligatoire fourni par la plate-forme Dali}
companyName : {paramètre d'en-tête obligatoire fourni par Vinci Facilities}Ce endpoint prend en charge les paramètres de requête suivants et leurs combinaisons:
- ticketCode={ticketCode}: paramètre de requête permettant d'obtenir une requête d'intervention par son code interne
- ticketExternalId={ticketExternalId}: paramètre de requête permettant d'obtenir une requête d'intervention par son identifiant externe
Le payload renvoyé par l'opération GET a le format suivant :
{
"header": {
"apiname" : "{nom de l'API}",
"apiversion": "{version du schéma suivant le format à un chiffre X}",
"correlationId": "{correlationId transmis tout au long de la transaction}"
},
"data": [
{
"ticketExternalId": "nom du ticket dans le système partenaire",
"ticketId": "Id interne du ticket LOOMA",
"ticketCode": "code interne du ticket LOOMA",
"ticketBusinessStatus": "Statut LOOMA du ticket",
"ticketPriority": "priorité du ticket",
"ticketType": "type business du ticket (exemple : maintenance corrective)",
"problemTypeCode": "domaine contractuel fixe de VFF",
"ticketOriginCode": "Code origine du ticket",
"ticketClient": "nom du client lié au ticket",
"companyName": "nom de l'environnement LOOMA",
"ticketSubject": "sujet du ticket",
"ticketRemarks": "remarque du ticket",
"lastActivityRemark": "note du technicien lors de sa dernière intervention",
"dutyFlag": boolean,
"outsideBundleFlag": boolean,
"clientPresenceFlag": boolean,
"doNotStartBeforeDate": "yyyy-mm-ddThh:mm:ssZ",
"ticketClientValidator": "email du validateur",
"workImpactUrgency": "priorité dans mon travail",
"workEnvironmentImpactUrgency": "priorité dans mon environnement",
"siteArrivalContractualDate": "yyyy-mm-ddThh:mm:ssZ",
"siteId": "site d'intervention",
"contactExternalId": "identifiant du contact",
"contactEmailAddress": "email du contact",
"contactFirstName": "prénom du contact",
"contactLastName": "nom du contact",
"contactMobilePhone": "numéro de portable du contact",
"additionalContact": "contact additionnel",
"ticketEquipmentId": "Id de l'équipement du ticket",
"serviceLevel1": "catalogue de service categorie 1",
"serviceLevel2": "catalogue de service categorie 2",
}
]| Nom de la balise | Type | Description | Exemple |
|---|---|---|---|
| companyName | Texte | company LOOMA | |
| ticketOriginCode | Valeur fixe | Canal de création | "INTX" |
| contactEmailAddress | Texte | Email du contact | "prenom.nom@entreprise.com" |
| contactFirstName | Texte | Prénom du contact | "prenom " |
| contactLastName | Texte | Nom du contact | "nom " |
| contactMobilePhone | Texte40 | Téléphone du contact | "0600000000 " |
| ticketSubject | Texte | Titre du ticket | "titre " |
| ticketRemarks | Texte | Commentaire du client | "remarque " |
| problemTypeCode | Liste | Domaine | "S-DEC" |
| ticketPriority | Liste | Priorité (VF) LOW MEDIUM HIGH | "LOW " |
| ticketEquipmentId | Texte | Equipement ID LOOMA | |
| ticketId | Texte | ID interne | |
| ticketCode | Texte | ID Looma de la demande de service | |
| ticketExternalId | Texte | Numéro de ticket externe (système client) | |
| siteId | Texte | Site LOOMA | |
| ticketType | Liste | 1 | Maintenance corrective |
| siteArrivalRealDate | Date/heure default format YYYY-MM-DDTHH:MM:SSZ (gmt time) | date de passage au statut 05 (en cours d'exécution) | "2021-06-02T12:48:50+0200" |
| ticketClosingRealDate | Date/heure default format YYYY-MM-DDTHH:MM:SSZ (gmt time) | date de passage au statut 09 (clôture administrative) / date de passage au statut 07 (clôture proposé) | "2021-06-02T12:48:50+0200" |
| ticketStartRealDate | Date/heure default format YYYY-MM-DDTHH:MM:SSZ (gmt time) | date de passage au statut 03 (pris en compte) | "2021-06-02T12:48:50+0200" |
| lastActivityRemark | Texte | Dernière remarque du technicien | |
| activitySchedulingDate | Date/heure default format YYYY-MM-DDTHH:MM:SSZ (gmt time) | date du passage au statut 04 (activité planifiée) | "2021-06-02T12:48:50+0200" |
| building | Texte | Batiment LOOMA | |
| floor | Texte | Etage LOOMA | |
| local | Texte | Local LOOMA | |
| ticketCreationDate | Date/heure default format YYYY-MM-DDTHH:MM:SSZ (gmt time) | Date de création du ticket | "2021-06-02T12:48:50+0200" |
| doNotStartBeforeDate | Date/heure default format YYYY-MM-DDTHH:MM:SSZ (gmt time) | Ne pas intervenir par le client | "2021-06-02T12:48:50+0200" |
| ticketBusinessStatus | Liste | Statut LOOMA | "102" |
POST /rest/v1/attachments
Envoyer une pièce jointe sur une demande de service à l'application LOOMA
Le body à mettre dans l'opération POST a le format suivant :
[{
"attachmentFileName": "attachmentFileName.pdf",
"ticketExternalId": "idExterne",
"attachmentType": "PDF",
"attachmentExternalId": "attachmentExternalId",
"attachmentCategory": "LOOMA-XXX",
"attachmentFileContent": "content"
}]| Nom de la balise | Mandatory | Type | Description |
|---|---|---|---|
| attachmentFileName | Y | Texte | Nom du fichier |
| attachmentType | Texte | Type du fichier | |
| attachmentExternalId | Texte | Id Externe de la pièce jointe | |
| ticketExternalId | Y | Texte | Id Externe de la demande de service |
| attachmentCategory | Y | Texte | Catégorie de la pièce jointe |
| AttachementFileContent | Texte | Contenu du fichier (5 Mo maximum) |
Les types de fichiers autorisés sont les suivants : pdf, jpeg, txt, png, xlsx, docx, jpg, xls, doc, ppt, pptx, csv, zip
GET /rest/v1/site-locations
Récupérer un site par son id
Ce endpoint nécessite l'en-tête HTTP ci-dessous
Content-type: application/json
X-Conversation-Id: {Paramètre d'en-tête facultatif fourni par le client}
client_id: {paramètre d'en-tête obligatoire fourni par la plate-forme Dali}
client_secret: {paramètre d'en-tête obligatoire fourni par la plate-forme Dali}Ce endpoint prend en charge le paramètre de requête suivant et leur combinaison:
- siteId={siteId}: paramètre de requête permettant d'obtenir une requête d'un site par son id
Le payload renvoyé par l'opération GET a le format suivant :
{
"header": {
"apiname" : "{nom de l'API}",
"apiversion": "{version du schéma suivant le format à un chiffre X}",
"correlationId": "{correlationId transmis tout au long de la transaction}"
},
"data": [
{
"siteId": "identifiant du site",
"locationId": "id de localisation",
"locationNodeId": "nodeId",
"locationParentNodeId": "parentNodeId",
"locationHierarchyLevel": "niveau hiérarchique",
"locationDescription": "Description",
"locationDesignation": "Désignation",
"locationType": "Type de site",
"subLevels": [
{
"siteId": "identifiant du site",
"locationId": "id de localisation",
"locationNodeId": "nodeId",
"locationParentNodeId": "parentNodeId",
"locationHierarchyLevel": "niveau hiérarchique",
"locationDescription": "Description",
"locationDesignation": "Désignation",
"locationType": "Type de site"
}
]
}
],POST /rest/v1/location-nodes
Envoyer un élément de localisation présent (batiment, étage, local) sur un site
Ce endpoint nécessite l'en-tête HTTP ci-dessous
Content-type: application/json
X-Conversation-Id: {Paramètre d'en-tête facultatif fourni par le client}
client_id: {paramètre d'en-tête obligatoire fourni par la plate-forme Dali}
client_secret: {paramètre d'en-tête obligatoire fourni par la plate-forme Dali}Le body à mettre dans l'opération POST a le format suivant :
{
"loomaTypeId": "Type",
"siteId": "XXXX/00000XX",
"superiorLocationId": "XXXX/00000XX/00X/000X",
"typeId": "LOCAL TECHNIQUE",
"locationName": "API location",
"userStatusId": "XX",
"sensitive": "true",
"scope": "ScopeName"
}| Nom de la balise | Mandatory | Type | Description |
|---|---|---|---|
| loomaTypeId | Y | Texte | Type de localisation |
| siteId | Texte | Id du site | |
| superiorLocationId | Texte | Id supérieur de localisation | |
| typeId | Y | Texte | Type de localisation |
| locationName | Y | Texte | Nom de la localisation |
| userStatusId | Texte | Id statut de l'user | |
| sensitive | Texte | Sensible | |
| scope | Texte | Périmètre |
Gestion des erreurs
| # | Statut | Type | Message d'erreur spécifique | Erreur |
|---|---|---|---|---|
| 1 | 400 | APIKIT:BAD_REQUEST | Required {field} not specified | Mauvais input lors d'un appel vers un endpoint de l'api |
| 2 | 404 | APIKIT:NOT_FOUND | {endpoint} | Endpoint inexistant ou mal renseigné |
| 3 | 400 | APIKIT:METHOD_NOT_ALLOWED | HTTP Method {method} not allowed for: {endpoint} | Appel vers un endpoint avec une méthode non implémentée (ex : POST/PATCH/GET) |
| 4 | 400 | APIKIT:UNSUPPORTED_MEDIA_TYPE | Unsupported mediatype | Le fichier joint n'est pas au bon format |
| 5 | 400 | HTTP:BAD_REQUEST | You must fill in one of the following query parameters : {parameters} | Mauvais input renseigné lors d'un appel vers Looma |
| 6 | 404 | HTTP:NOT_FOUND | {error message} | Objet non trouvé lors d'un appel |
| 7 | 401 | HTTP:UNAUTHORIZED/CODEX:UNAUTHORIZED/LOOMA:UNAUTHORIZED | You do not have the authorization for this operation. | Appel non autorisé sur une méthode à partir d'un site donné |
| 8 | 422 | MULE:UNKNOWN::error://resource-is-not-valid | CA-201: Object [ServiceCall:XXXXX] doesn't have a unique externalId [XXXXXXXX] | Message d'erreur envoyé par Looma : le ticket existe déjà |
| 9 | 403 | HTTP:FORBIDDEN/NOT_PERMITTED | You do not have the authorization for this operation on this site | Méthode interdite pour l'utilisateur |
| 10 | 408 | HTTP:TIMEOUT | Timeout exceeded | L'appel prend trop de temps et est parti en timeout |
| 11 | 500 | INTERNAL SERVER ERROR | HTTP POST on resource {endpoint} failed: internal server error (500) | Une erreur inconnue s'est produite |
| 12 | 403 | EMAIL:UNAUTHORIZED | This contact is inactive on this site. You must have an active contact for this operation. | Le contact technique est inactif sur le site appelé |
| 13 | 40* | MULE:COMPOSITE_ROUTING | {error message} | Une erreur est survenu lors d'une récupération des données |